/**
 * API模块
 * 基于request封装具体业务接口
 */

const request = require('./request');

// Banner相关接口
const bannerApi = {
  /**
   * 获取首页轮播图列表
   * @returns {Promise} - 轮播图列表
   */
  getBannerList() {
    return request.get('/mini/banner/list');
  }
};

// 场地相关接口
const venueApi = {
  /**
   * 获取场馆列表
   * @param {Object} params - 查询参数
   * @returns {Promise} - 场馆列表
   */
  getVenueList(params) {
    return request.get('/mini/venue/list', params);
  },

  /**
   * 获取场馆详情
   * @param {number} id - 场馆ID
   * @returns {Promise} - 场馆详情
   */
  getVenueDetail(id) {
    return request.get('/mini/venue/detail', { id });
  },

  /**
   * 获取场馆套餐
   * @param {number} id - 场馆ID
   * @returns {Promise} - 场馆套餐列表
   */
  getVenuePackages(id) {
    return request.get('/mini/venue/packages', { id });
  },

  /**
   * 获取场地可用时间段
   * @param {number} id - 场地D
   * @param {string} date - 日期，格式为YYYY-MM-DD
   * @returns {Promise} - 可用时间段列表
   */
  getVenueTimeSlots(id, date) {
    return request.get('/mini/venue/timeslots', { id, date });
  },
  
  /**
   * 获取场地预约时间轴数据
   * @param {number} roomId - 房间ID
   * @param {string} date - 日期，格式为YYYY-MM-DD
   * @returns {Promise} - 预约时间轴数据
   */
  getRoomTimelineData(roomId, date) {
    return request.get('/mini/venue/timeline', { room_id: roomId, date });
  },
  
  /**
   * 检查时间段是否可预约
   * @param {number} venueId - 场地ID
   * @param {number} startTime - 开始时间戳
   * @param {number} endTime - 结束时间戳
   * @returns {Promise} - 检查结果
   */
  checkTimeSlotAvailable(venueId, startTime, endTime) {
    return request.get('/mini/venue/check_available', { 
      venue_id: venueId, 
      start_time: startTime, 
      end_time: endTime 
    });
  },

  /**
   * 获取场地类型列表
   * @returns {Promise} - 场地类型列表
   */
  getVenueTypes(params) {
    return request.get('/mini/venue_type',params);
  }
};

// 门店相关接口
const storeApi = {
  /**
   * 获取门店列表
   * @param {Object} params - 查询参数
   * @returns {Promise} - 门店列表
   */
  getStoreList(params) {
    return request.get('/mini/store/list', params);
  },

  /**
   * 搜索门店
   * @param {Object} params - 搜索参数，包含keyword(搜索关键词)
   * @returns {Promise} - 搜索结果列表
   */
  searchStores(params) {
    return request.get('/mini/store/search', params);
  },

  /**
   * 获取门店详情
   * @param {number} id - 门店ID
   * @returns {Promise} - 门店详情
   */
  getStoreDetail(id) {
    return request.get(`/mini/store/${id}`);
  },
  
  /**
   * 获取门店场地列表
   * @param {number} id - 门店ID
   * @param {number} typeId - 场地类型ID
   * @returns {Promise} - 场地列表
   */
  getStoreVenues(id, typeId = 0) {
    return request.get(`/mini/store/${id}/venues`, { type_id: typeId });
  },
  
  /**
   * 获取附近门店
   * @param {Object} params - 查询参数，包含经纬度、距离等
   * @returns {Promise} - 附近门店列表
   */
  getNearbyStores(params) {
    return request.get('/mini/store/nearby', params);
  },
  
  /**
   * 获取热门门店
   * @param {Object} params - 查询参数
   * @returns {Promise} - 热门门店列表
   */
  getHotStores(params) {
    return request.get('/mini/store/hot', params);
  }
};

// 城市相关接口
const cityApi = {
  /**
   * 获取城市列表
   * @param {Object} params - 查询参数
   * @returns {Promise} - 城市列表
   */
  getCityList(params) {
    return request.get('/mini/city/list', params);
  },
  
  /**
   * 获取热门城市
   * @returns {Promise} - 热门城市列表
   */
  getHotCities() {
    return request.get('/mini/city/hot');
  }
};

// 用户相关接口
const userApi = {
  /**
   * 通过code获取用户OpenID
   * @param {Object} data - 微信登录code
   * @returns {Promise} 返回包含OpenID的Promise
   */
  getOpenid(data) {
    return request.post('/mini/user/openid', data);
  },

  /**
   * 检查用户是否存在
   * @param {String} openid - 用户的OpenID
   * @returns {Promise} 返回用户是否存在的Promise
   */
  checkUserExist(openid) {
    return request.get(`/mini/user/check?openid=${openid}`);
  },

  /**
   * 微信手机号登录或注册
   * @param {Object} data - 登录信息（openid, encryptedData, iv, code, userInfo）
   * @returns {Promise} 返回登录结果Promise
   */
  loginOrRegister(data) {
    return request.post('/mini/user/login_or_register', data);
  },

  /**
   * 短信验证码登录
   * @param {Object} data - 登录信息（phone, code, wxCode）
   * @returns {Promise} 返回登录结果Promise
   */
  loginWithCode(data) {
    return request.post('/mini/user/login_code', data);
  },

  /**
   * 发送短信验证码
   * @param {Object} data - 手机号信息
   * @returns {Promise} 返回发送结果Promise
   */
  sendVerifyCode(data) {
    return request.post('/mini/user/verify_code', data);
  },

  /**
   * 获取用户信息
   * @returns {Promise} 返回用户信息Promise
   */
  getUserInfo() {
    return request.get('/mini/auth/user/info');
  },

  /**
   * 获取账户信息(余额、积分等)
   * @returns {Promise} 返回账户信息Promise
   */
  getAccountInfo() {
    return request.get('/mini/auth/user/account');
  },

  /**
   * 更新用户信息
   * @param {Object} data - 用户信息数据
   * @returns {Promise} 返回更新结果Promise
   */
  updateUserInfo(data) {
    return request.post('/mini/auth/user/update', data);
  },

  /**
   * 用户退出登录
   * @returns {Promise} 返回退出结果Promise
   */
  logout() {
    return request.post('/mini/auth/user/logout');
  },

  /**
   * 获取积分记录
   * @param {Object} params - 查询参数
   * @returns {Promise} 返回积分记录Promise
   */
  getPointsLogs(params) {
    return request.get('/mini/auth/user/points/logs', params);
  },

  /**
   * 获取余额记录
   * @param {Object} params - 查询参数
   * @returns {Promise} 返回余额记录Promise
   */
  getBalanceLogs(params) {
    return request.get('/mini/auth/user/balance/logs', params);
  },

  /**
   * 添加收藏
   * @param {number} storeId - 门店ID
   * @returns {Promise} 收藏结果
   */
  addFavorite(storeId) {
    return request.post('/mini/auth/favorite/add', { store_id: storeId });
  },

  /**
   * 取消收藏
   * @param {number} storeId - 门店ID
   * @returns {Promise} 取消收藏结果
   */
  cancelFavorite(storeId) {
    return request.post('/mini/auth/favorite/cancel', { store_id: storeId });
  },

  /**
   * 获取收藏列表
   * @param {Object} params - 查询参数
   * @returns {Promise} 收藏列表
   */
  getFavoriteList(params) {
    return request.get('/mini/auth/favorite/list', params);
  },

  /**
   * 检查是否已收藏
   * @param {number} storeId - 门店ID
   * @returns {Promise} 检查结果
   */
  checkIsFavorite(storeId) {
    return request.get('/mini/auth/favorite/check', { store_id: storeId });
  }
};

// 订单相关接口
const orderApi = {
  /**
   * 创建订单
   * @param {Object} data - 订单数据
   * @returns {Promise} - 创建结果
   */
  createOrder(data) {
    return request.post('/mini/order/create', data);
  },

  /**
   * 获取订单列表
   * @param {Object} params - 查询参数
   * @returns {Promise} - 订单列表
   */
  getOrderList(params) {
    return request.get('/mini/order/list', params);
  },

  /**
   * 获取订单详情
   * @param {number} id - 订单ID
   * @returns {Promise} - 订单详情
   */
  getOrderDetail(id) {
    return request.get(`/mini/order/detail/${id}`);
  },

  /**
   * 取消订单
   * @param {number} id - 订单ID
   * @returns {Promise} - 取消结果
   */
  cancelOrder(id) {
    return request.post('/mini/order/cancel', { id });
  },

  /**
   * 获取我的预约订单列表
   * @param {Object} params - 查询参数，包含status(0: 待确认, 1: 已确认, 2: 已完成, 3: 已取消)
   * @returns {Promise} - 预约订单列表
   */
  getMyBookings(params) {
    return request.get('/mini/auth/booking/list', params);
  },

  /**
   * 获取可续订的预约订单列表
   * @param {Object} params - 查询参数
   * @returns {Promise} - 可续订的预约订单列表
   */
  getMyRenewableBookings(params) {
    return request.get('/mini/auth/booking/renewable', params);
  },

  /**
   * 获取预约订单详情
   * @param {number} id - 预约订单ID
   * @returns {Promise} - 预约订单详情
   */
  getBookingDetail(id) {
    return request.get('/mini/auth/booking/detail', { id });
  },

  /**
   * 取消预约订单
   * @param {number} id - 预约订单ID
   * @returns {Promise} - 取消结果
   */
  cancelBooking(id) {
    return request.post('/mini/auth/booking/cancel', { id });
  },
  
  /**
   * 更新订单状态
   * @param {Object} data - { id: 订单ID, status: 状态 }
   * @returns {Promise}
   */
  updateStatus(data) {
    return request.post('/mini/auth/booking/update_status', data);
  },
  
  /**
   * 创建预约订单
   * @param {Object} data - 预约数据，包含venue_id, room_name, start_time, end_time, package_hours, total_amount等
   * @returns {Promise} - 创建结果
   */
  createBooking(data) {
    return request.post('/mini/auth/booking/create', data);
  },

  /**
   * 创建预订单（获取支付参数）
   * @param {Object} data - 预约数据，包含venue_id, room_name, start_time, end_time, package_hours, total_amount等
   * @returns {Promise} - 预订单创建结果，包含支付参数
   */
  createPreOrder(data) {
    return request.post('/mini/auth/booking/create_pre_order', data);
  },

  /**
   * 确认订单（支付成功后）
   * @param {Object} data - 包含 pre_order_id
   * @returns {Promise} - 确认结果
   */
  confirmOrder(data) {
    return request.post('/mini/auth/booking/confirm_order', data);
  },

  /**
   * 获取支付参数（用于重新支付）
   * @param {Object} data - 包含 pre_order_id
   * @returns {Promise} - 支付参数
   */
  getPayParams(data) {
    return request.get('/mini/auth/booking/pay_params', data);
  },

  /**
   * 创建续约订单
   * @param {Object} data - 续约数据，包含venue_id, room_name, start_time, end_time, package_hours, total_amount等
   * @returns {Promise} - 创建结果
   */
  createRenewBooking(data) {
    return request.post('/mini/auth/booking/renew', data);
  },

  /**
   * 创建续订预订单（获取支付参数）
   * @param {Object} data - 续约数据，包含venue_id, start_time, end_time, total_amount, original_booking_id等
   * @returns {Promise} - 预订单创建结果，包含支付参数
   */
  createRenewPreOrder(data) {
    return request.post('/mini/auth/booking/renew_pre_order', data);
  },

  /**
   * 确认续订订单（支付成功后）
   * @param {Object} data - 包含 pre_order_id
   * @returns {Promise} - 确认结果
   */
  confirmRenewOrder(data) {
    return request.post('/mini/auth/booking/confirm_renew_order', data);
  },

  /**
   * 获取可续订的订单列表
   * @param {Object} data - 请求参数，包含page、page_size等
   * @returns {Promise} - 返回请求Promise
   */
  getRenewableList: function(data) {
    return request({
      url: '/mini/auth/booking/renewable',
      method: 'GET',
      data: data
    });
  }
};

// 优惠券相关接口
const couponApi = {

  getUsageRange(id) {
    return request.get('/mini/auth/coupon/range', { id });
  },
  /**
   * 获取可用优惠券列表
   * @returns {Promise} - 优惠券列表
   */
  getCouponList() {
    return request.get('/mini/auth/coupon/list');
  },

  /**
   * 使用优惠券
   * @param {number} id - 优惠券ID
   * @returns {Promise} - 使用结果
   */
  useCoupon(id) {
    return request.post('/mini/auth/coupon/use', { id });
  },

  /**
   * 获取优惠券列表
   * @returns {Promise} - 优惠券列表
   */
  getList() {
    return request.get('/mini/auth/coupon/list');
  },

  /**
   * 根据ID获取优惠券详情
   * @param {number} id - 优惠券ID
   * @returns {Promise} - 优惠券详情
   */
  getDetail(id) {
    return request.get('/mini/auth/coupon/detail', { id });
  },

  /**
   * 兑换优惠券
   * @param {number} id - 优惠券ID
   * @returns {Promise} - 兑换结果
   */
  exchange(id) {
    return request.post('/mini/auth/coupon/exchange', { id });
  },

  /**
   * 获取我的优惠券列表
   * @returns {Promise} - 我的优惠券列表
   */
  getMyCoupons() {
    return request.get('/mini/auth/coupon/my');
  },

  /**
   * 根据优惠券码获取优惠券信息
   * @param {string} code - 优惠券码
   * @returns {Promise} - 优惠券信息
   */
  getByCode(code) {
    return request.get('/mini/auth/coupon/code', { code });
  },
  
  /**
   * 获取可兑换的优惠券列表
   * @returns {Promise} - 可兑换的优惠券列表
   */
  getExchangeableCoupons() {
    return request.get('/mini/auth/coupon/exchangeable');
  },
  
  /**
   * 使用积分兑换优惠券
   * @param {number} couponId - 优惠券ID
   * @returns {Promise} - 兑换结果
   */
  exchangeCoupon(couponId) {
    return request.post('/mini/auth/coupon/exchange', { coupon_id: couponId });
  },
  
  /**
   * 验证优惠券
   * @param {Object} data - 验券数据，包含 code(券码), store_id(门店ID), type(券类型)
   * @returns {Promise} - 验证结果
   */
  verifyCoupon(data) {
    return request.post('/mini/auth/coupon/verify', data);
  }
};

// 签到相关接口
const checkinApi = {
  /**
   * 获取签到信息
   * @returns {Promise} - 签到信息
   */
  getInfo() {
    return request.get('/mini/auth/checkin/info');
  },
  
  /**
   * 执行签到
   * @returns {Promise} - 签到结果
   */
  doCheckin() {
    return request.post('/mini/auth/checkin/do');
  },
  
  /**
   * 获取签到历史
   * @param {Object} params - 查询参数
   * @returns {Promise} - 签到历史列表
   */
  getHistory(params) {
    return request.get('/mini/auth/checkin/history', params);
  }
};

// 充值套餐相关接口
const rechargeApi = {
  // 获取充值套餐列表
  getPackages: function(params) {
    return request.get('/mini/auth/recharge/package', params);
  },
  // 获取充值套餐详情
  getPackageDetail: function(id) {
    return request.get('/mini/auth/recharge/package/detail', { id: id });
  }
};

// 会员充值相关接口
const memberApi = {
  recharge: {
    // 创建充值订单
    create: function(data) {
      return request.post('/mini/auth/member/recharge', data);
    },
    // 获取充值记录列表
    list: function(params) {
      return request.get('/mini/auth/member/recharge', params);
    }
  }
};

/**
 * 查询支付状态
 * @param {string} preOrderNo 预订单号
 */
function checkPaymentStatus(preOrderNo) {
  return request({
    url: '/mini/auth/payment/check_status',
    method: 'GET',
    data: {
      pre_order_no: preOrderNo
    }
  });
}

/**
 * 获取支付参数（重新支付）
 * @param {number} preOrderId 预订单ID
 */
function getPayParams(preOrderId) {
  return request({
    url: '/mini/auth/booking/pay_params',
    method: 'GET',
    data: {
      pre_order_id: preOrderId
    }
  });
}

/**
 * 创建续单预订单
 * @param {Object} data 续单数据
 */
function createRenewBooking(data) {
  return request.post('/mini/auth/booking/renew', data);
}

/**
 * 获取可续单的订单列表
 * @param {Object} params 查询参数
 */
function getRenewableBookings(params) {
  return request.get('/mini/auth/booking/renewable', params);
}

// 设备相关接口
const deviceApi = {
  /**
   * 开门接口
   * @param {Object} data - 请求参数，包含store_id(门店ID)
   * @returns {Promise} - 开门结果
   */
  openDoor(data) {
    return request.get('/mini/auth/device/open_door', data);
  },
};

// 导出所有API
const api = {
  banner: bannerApi,
  venue: venueApi,
  store: storeApi,
  user: userApi,
  order: orderApi,
  coupon: couponApi,
  checkin: checkinApi,
  member: memberApi,
  recharge: rechargeApi,
  device: deviceApi, // 添加设备相关API
  groupBuy: {
    /**
     * 获取团购券列表
     * @param {Object} params - 查询参数 
     * @returns {Promise} - 团购券列表
     */
    getList(params) {
      return request.get('/mini/auth/groupbuy/list', params);
    },
    
    /**
     * 获取团购券详情
     * @param {number} id - 团购券ID
     * @returns {Promise} - 团购券详情
     */
    getDetail(id) {
      return request.get('/mini/auth/groupbuy/detail', { id });
    },
    
    /**
     * 购买团购券
     * @param {Object} data - 购买数据
     * @returns {Promise} - 购买结果
     */
    buy(data) {
      return request.post('/mini/auth/groupbuy/buy', data);
    },
    
    /**
     * 获取我的团购券列表
     * @param {Object} params - 查询参数，如status等
     * @returns {Promise} - 返回我的团购券列表
     */
    getMyGroupBuy(params) {
      return request.get('/mini/auth/groupbuy/my', params);
    },
    
    /**
     * 获取团购券使用范围
     * @param {number} id - 团购券ID
     * @returns {Promise} - 返回团购券使用范围信息
     */
    getUsageRange(id) {
      return request.get('/mini/auth/groupbuy/range', { id });
    }
  },
  // 添加支付相关接口
  checkPaymentStatus,
  getPayParams,
  // 添加续单相关接口
  createRenewBooking,
  // 获取可续单的订单列表
  getRenewableBookings,
  city: cityApi
};

module.exports = api;